package com.curricula.contacto.action;

import java.lang.reflect.InvocationTargetException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.curricula.contacto.form.ContactoForm;
import com.curricula.contacto.service.ContactoService;
import com.curricula.contacto.vo.ContactoVO;
import com.curricula.mensaje.vo.MsgVO;

/**
 * ActionForward que para tratar los envios de correos.
 * 
 * @author Carlos
 * @version 1.0
 * 
 */
public class ContactoAction extends DispatchAction {
	ActionForward forward = null;
	MsgVO msg = new MsgVO();
	
	/**
	 * Envia un correo a una direccion determinada
	 * 
	 * @author Carlos
	 * @param ActionMapping mapping
	 * @param ActionForm form
	 * @param HttpServletRequest request
	 * @param HttpServletResponse response
	 * @return mapping.findForward forward
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 */
	public ActionForward contacto(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ){
		try {
			ContactoForm contactoForm = (ContactoForm) form;
			ContactoVO contactoVO = new ContactoVO();

			BeanUtils.copyProperties(contactoVO, contactoForm);
			contactoVO.setConDescripcion(contactoVO.getConDescripcion()+"\n\nAtte. "+contactoVO.getConNombre()+" ("+contactoVO.getConCorreo()+")");
			contactoVO.setConCorreo("kdna910@gmail.com");
			
			if(ContactoService.enviarMail(contactoVO))
			{
				contactoForm.reset(mapping, request);
				form.reset(mapping, request);
				
				msg.setMsgTipo("informacion");
				msg.setMsgTitulo("Envio correcto");
				msg.setMsgDescripcion("Tu mensaje se ha enviado correctamente.");				
				request.setAttribute("msgVO", msg);
				forward = mapping.findForward("inicio");

			}else{
				msg.setMsgTipo("informacion");
				msg.setMsgTitulo("Error en el envio");
				msg.setMsgDescripcion("No se ha podido enviar el mensaje.");				
				request.setAttribute("msgVO", msg);
				forward = mapping.findForward("inicio");
			}
		} catch (Exception e) {
			MsgVO msgerror = new MsgVO("error", e);
			request.setAttribute("msgVO", msgerror);				
			forward = mapping.findForward("inicio");
		}
		return forward;
	}
	
	/**
	 * Envia un correo a una direccion determinada para notificar algun comentario
	 * o asunto.
	 * 
	 * @author Carlos
	 * @param ActionMapping mapping
	 * @param ActionForm form
	 * @param HttpServletRequest request
	 * @param HttpServletResponse response
	 * @return mapping.findForward forward
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 */
	public ActionForward notifica(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ){
		try {
			ContactoVO contactoVO = new ContactoVO();
			contactoVO.setConAsunto("Notificacion Curriculum.com");
			contactoVO.setConCorreo(request.getParameter("correo"));
			contactoVO.setConDescripcion("Esta es una notificacion de correo electronico.");
			
			if(ContactoService.enviarMail(contactoVO))
			{
				msg.setMsgTipo("informacion");
				msg.setMsgTitulo("Envio correcto");
				msg.setMsgDescripcion("Tu mensaje se ha enviado correctamente. En breve nos pondremos en contacto contigo.");				
				request.setAttribute("msgVO", msg);
				forward = mapping.findForward("inicio");
			}else{
				msg.setMsgTipo("informacion");
				msg.setMsgTitulo("Error en el envio");
				msg.setMsgDescripcion("No se ha podido enviar el mensaje.");				
				request.setAttribute("msgVO", msg);
				forward = mapping.findForward("inicio");
			}
		} catch (Exception e) {
			MsgVO msgerror = new MsgVO("error", e);
			request.setAttribute("msgVO", msgerror);				
			forward = mapping.findForward("inicio");
		}
		return forward;
	}
}
